home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d1 / dostech.arc / CHAP5 < prev    next >
Text File  |  1989-02-04  |  65KB  |  1,358 lines

  1. Chapter 5
  2.  
  3.  Programming Technical Reference - IBM
  4.  Copyright 1988, Dave Williams
  5.  
  6.                         Interrupts 22h Through 86h
  7.  
  8.  
  9. Interrupt 22h   Terminate Address
  10. (0:0088h)
  11.  This interrupt transfers control to the far (dword) address at this interrupt
  12. location when an application program terminates. The default address for this
  13. interrupt is 0:0088h through 0:008Bh. This address is copied into the program's
  14. Program Segment Prefix at bytes 0Ah through 0Dh at the time the segment is
  15. created and is restored from the PSP when the program terminates. The calling
  16. program is normally COMMAND.COM or an application. Do not issue this interrupt
  17. directly, as the EXEC function call does this for you. If an application
  18. spawns a child process, it must set the Terminate Address prior to issuing the
  19. EXEC function call, otherwise when the second program terminated it would
  20. return to the calling program's Terminate Address rather than its own. This
  21. address may be set with int 21, function 25h.
  22.  
  23.  
  24.  
  25. Interrupt 23h   Ctrl-Break Exit Address
  26. (0:008Ch)
  27.  If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or STDAUX, int
  28. 23h is executed. If BREAK is on, int 23h is checked on MOST function calls
  29. (notably 06h). If the user written Ctrl-Break routine saves all registers, it
  30. may end with a return-from-interrupt instruction (IRET) to continue program
  31. execution. If the user-written interrupt program returns with a long return, the
  32. carry flag is used to determine whether the program will be aborted. If the
  33. carry flag is set, the program is aborted, otherwise execution continues (as
  34. with a return by IRET). If the user-written Ctrl-Break interrupt uses function
  35. calls 09h or 0Ah, then ctrl-C/CR/LF are output. If execution is continued with
  36. an IRET, I/O continues from the start of the line. When the interrupt occurs,
  37. all registers are set to the value they had when the original function call to
  38. DOS was made. There are no restrictions on what the Ctrl-Break handler is
  39. allowed to do, including DOS function calls, as long as the registers are
  40. unchanged if an IRET is used. If the program creates a new segment and loads a
  41. second program which itself changes the Ctrl-Break address, the termination of
  42. the second program and return to the first causes the Ctrl-Break address to
  43. be restored from the PSP to the value it had before execution of the second
  44. program.
  45.  
  46.  
  47.  
  48. Interrupt 24h   Critical Error Handler
  49. (0:0090h)
  50.  When a critical error occurs within DOS, control is transferred to an error
  51. handler with an int 24h. This may be the standard DOS error handler (ABORT,
  52. RETRY, IGNORE) or a user-written routine.
  53.  On entry to the error handler, AH will have its bit 7=0 (high order bit)
  54. if the error was a disk error (probably the most common error), bit 7=1 if
  55. not.
  56.  BP:SI contains the address of a Device Header Control Block from which
  57. additional information can be retrieved (see below).
  58.  The register is set up for a retry operation and an error code is in the
  59. lower half of the DI register with the upper half undefined. These are the
  60. error codes:
  61.  
  62.  The user stack is in effect and contains the following from top to bottom:
  63.  
  64.         IP      DOS registers from issuing int 24h
  65.         CS      int 24h
  66.         flags
  67.         AX      user registers at time of signal
  68.         BX      int 21h request
  69.         CX
  70.         DX
  71.         SI
  72.         DI
  73.         BP
  74.         DS
  75.         ES
  76.         IP      from original int 21h
  77.         CS
  78.         flags
  79.  
  80.  To reroute the critical error handler to a user-writen critical error handler,
  81. the following should be done:
  82.  
  83. Before an int 24h occurs:
  84. 1) The user application initialization code should save the int 24h vector and
  85.    replace the vector with one pointing to the user error routine.
  86.  
  87. When the int 24h occurs:
  88. 2) When the user error routine received control it should push the flag
  89.    registers onto the stack and execute a far call to the original int 24h
  90.    vector saved in step 1.
  91. 3) DOS gives the appropriate prompt, and waits for user input (Abort, Retry,
  92.    Ignore, Fail). After the user input, DOS returns control to the user error
  93.    routine instruction following the far call.
  94. 4) The user error routine can now do any tasks nescessary. To return to the
  95.    original application at the point the error occurred, the error routine needs
  96.    to execute an IRET instruction. Otherwise, the user error routine should
  97.    remove the IP, CS, and flag registers from the stack. Control can then be
  98.    passed to the desired point.
  99.  
  100.  
  101.  Int 24h provides the following values in registers on entry to interrupt
  102. handler:
  103.  
  104. entry   AH      status byte
  105.             bit 7       0       disk I/O hard error
  106.                         1       other error - if block device, bad FAT
  107.                                 - if char device, code in DI
  108.                 6       unused
  109.                 5       0       if IGNORE is not allowed
  110.                         1       if IGNORE is allowed
  111.                 4       0       if RETRY  is not allowed
  112.                         1       if RETRY  is allowed
  113.                 3       0       if FAIL   is not allowed
  114.                         1       if FAIL   is allowed
  115.                 2 \     disk area of error  00 = DOS area  01 = FAT
  116.                 1 /                         10 = root dir  11 = data area
  117.                 0       0       if read operation
  118.                         1       if write operation
  119.         AL      drive number if AH bit 7 = 1, otherwise undefined
  120.                 If it is as hard error on disk (AH bit 7=0), register AL
  121.                 contains the failing drive number (0=A:, 1=B:, etc.).
  122.         BP:SI   address of a Device Header Control Block for which error
  123.                 occurred block device if high bit of BP:SI+4 = 1
  124.  low byte of DI: error code (note: high byte is undefined)
  125.                error code      description
  126.                 00h             attempt to write on write-protected diskette
  127.                 01h             unknown unit
  128.                 02h             drive not ready
  129.                 03h             unknown command
  130.                 04h             data error (bad CRC)
  131.                 05h             bad request structure length
  132.                 06h             seek error
  133.                 07h             unknown media type
  134.                 08h             sector not found
  135.                 09h             printer out of paper
  136.                 0Ah             write fault
  137.                 0Bh             read fault
  138.                 0Ch             general failure
  139.                 0Fh             invalid disk change (DOS 3.x)
  140.  
  141. handler must return
  142.  
  143.  The registers are set such that if an IRET is executed, DOS responds according
  144. to (AL) as follows:
  145.  AL     00h  ignore the error
  146.         01h  retry the operation
  147.         02h  terminate via int 22h
  148.         03h  fail the system call that is in progress (DOS 3.2+)
  149. note 1) Be careful when choosing to ignore a response because this causes DOS to
  150.         beleive that an operation has completed successfully when it may not
  151.         have.
  152.      2) If the error was a character device, the contents of AL are invalid.
  153.  
  154.  
  155.  
  156. OTHER ERRORS
  157.  
  158.  If AH bit 7=1, the error occurred on a character device, or was the result of
  159. a bad memory image of the FAT. The device header passed in BP:SI can be examined
  160. to determine which case exists. If the attribute byte high-order bit indicates
  161. a block device, then the error was a bad FAT. Otherwise, the error is on a
  162. character device.
  163.  If a character device is involved, the contents of AL are unpredictable, the
  164. error code is in DI as above.
  165.  
  166. Notes:
  167. 1.  Before giving this routine control for disk errors, DOS performs several
  168.     retries. The number of retries varies according to the DOS version.
  169. 2.  For disk errors, this exit is taken only for errors occurring during an
  170.     int 21h function call. It is not used for errors during an int 25h or 26h.
  171. 3.  This routine is entered in a disabled state.
  172. 4.  All registers must be preserved.
  173. 5.  This interrupt handler should refrain from using DOS function calls. If
  174.     necessary, it may use calls 01h through 12h. Use of any other call destroys
  175.     the DOS stack and leaves DOS in an unpredictable state.
  176. 6.  The interrupt handler must not change the contents of the device header.
  177. 7.  If the interrupt handler handles errors itself rather than returning to DOS,
  178.     it should restore the application program's registers from the stack,
  179.     remove all but the last three words on the stack, then issue an IRET. This
  180.     will return to the program immediately after the int 21h that experienced
  181.     the error. Note that if this is done DOS will be in an unstable state until
  182.     a function call higher than 12h is issued, therefore not recommended.
  183. 8.  For DOS 3.x, IGNORE requests (AL=0) are converted to FAIL for critical
  184.     errors that occur on FAT or DIR sectors.
  185. 9.  For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL requests
  186.     for network critical errors (50-79).
  187.  
  188. The device header pointed to by BP:SI is as follows:
  189.  
  190. DWORD Pointer to next device (0FFFFh if last device)
  191.  
  192. WORD Attributes:
  193.  
  194. Bit     15      1       if character device.
  195.                         If bit 15 is 1:
  196.                         Bit 0 = 1 if current standard input
  197.                         Bit 1 = 1 if current standard output
  198.                         Bit 2 = 1 if current NULL device
  199.                         Bit 3 = 1 if current CLOCK device
  200.                 0       if block device
  201. Bit 14 is the IOCTL bit
  202. WORD pointer to device driver strategy entry point
  203. WORD pointer to device driver interrupt entry point
  204. 8-BYTE character device named field for block devices. The first byte is the
  205. number of units.
  206.  To tell if the error occurred on a block or character device, look at bit 15
  207. in the attribute field (WORD at BP:SI+4).
  208.  If the name of the character device is desired, look at the eight bytes
  209. starting at BP:SI+10.
  210.  
  211.  
  212. HANDLING OF INVALID RESPONSES (DOS 3.x)
  213.  
  214.         A) If IGNORE (AL=0) is specified by the user and IGNORE is not allowed
  215.            (bit 5=0), make the response FAIL (AL=3).
  216.         B) If RETRY (AL=1) is specified by the user and RETRY is not allowed
  217.            (bit 4=0), make the response FAIL (AL=3).
  218.         C) If FAIL (AL=3) is specified by the user and FAIL is not allowed (bit
  219.            3=0), make the response ABORT. (AL=2)
  220.  
  221.  
  222.  
  223.  
  224. Interrupt 25h   Absolute Disk Read
  225. Interrupt 26h   Absolute Disk Write
  226. (0:0094h, 0:0098h)
  227.   These transfer control directly to the device driver. On return, the original
  228. flags are still on the stack (put there by the INT instruction). This is
  229. necessary because return information is passed back in the current flags.
  230.   The number of sectors specified is transferred between the given drive and the
  231. transfer address. Logical sector numbers are obtained by numbering each sector
  232. sequentially starting from track 0, head 0, sector 1 (logical sector 0) and
  233. continuing along the same head, then to the next head until the last sector on
  234. the last head of the track is counted.  Thus, logical sector 1 is track 0, head
  235. 0, sector 2; logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
  236. then continues wih sector 1 on head 0 of the next track. Note that although the
  237. sectors are sequentially numbered (for example, sectors 2 and 3 on track 0 in
  238. the example above), they may not be physically adjacent on disk, due to
  239. interleaving. Note that the mapping is different from that used by DOS 1.10 for
  240. dual-sided diskettes.
  241.  
  242. The request is as follows:
  243.  
  244. int 25 for Absolute Disk Read,
  245. int 26 for Absolute Disk Write
  246. entry   AL      drive number (0=A:, 1=B:, etc)
  247.         CX      number of sectors to read
  248.         DS:BX   disk transfer address (buffer)
  249.         DX      first relative sector to read - beginning logical sector number
  250. return  CF      set if error
  251.         AL      error code issued to int 24h in low half of DI
  252.         AH      01h     bad command
  253.                 02h     bad address mark
  254.                 03h     write-protected disk
  255.                 04h     requested sector not found
  256.                 08h     DMA failure
  257.                 10h     data error (bad CRC)
  258.                 20h     controller failed
  259.                 40h     seek operation failed
  260.                 80h     attachment failed to respond
  261. note 1) Original flags on stack! Be sure to pop the stack to prevent
  262.         uncontrolled growth
  263.      2) Ints 25 and 26 will try rereading a disk if they get an error the first
  264.         time.
  265.      3) All registers except the segment registers are destroyed by these calls
  266.  
  267.  
  268.  
  269. Interrupt 27h   Terminate And Stay Resident
  270. (0:009Ch)       (obsolete)
  271.  This vector is used by programs that are to remain resident when COMMAND.COM
  272. regains control.
  273.  After initializing itself, the program must set DX to its last address plus
  274. one relative to the program's initial DS or ES value (the offset at which other
  275. programs can be loaded), then execute interrupt 27h. DOS then considers the
  276. program as an extension of itself, so the program is not overlaid when other
  277. programs are executed. This is useful for loading programs such as utilities
  278. and interrupt handlers that must remain resident.
  279.  
  280. entry   CS      current program segment
  281.         DX      last program byte + 1
  282. return  none
  283. note 1) This interrupt must not be used by .EXE programs that are loaded into
  284.         the high end of memory.
  285.      2) This interrupt restores the interrupt 22h, 23h, and 24h vectors in the
  286.         same manner as interrupt 20h.  Therefore, it cannot be used to install
  287.         permanently resident Ctrl-Break or critical error handler routines.
  288.      3) The maximum size of memory that can be made resident by this method is
  289.         64K.
  290.      4) Memory can be more efficiently used if the block containing a copy of
  291.         the environment is deallocated before terminating. This can be done by
  292.         loading ES with the segment contained in 2Ch of the PSP, and issuing
  293.         function call 49h (Free Allocated Memory).
  294.      5) DOS function call 4Ch allows a program to pass a completion code to DOS,
  295.         which can be interpreted with processing (see function call 31h).
  296.      6) Terminate and stay resident programs do not close files.
  297.      7) Int 21, function 31h is the preferred method to cause a program to
  298.         remain resident because this allows return information to be passed and
  299.         allows a program larger than 64K to remain resident.
  300.  
  301.  
  302.  
  303. Interrupt 28h   (not documented by Microsoft)
  304.            *    DOS Idle Interrupt
  305.  This interrupt is continuously called by DOS itself whenever it is in a wait
  306. state (i.e., when it is waiting for keyboard input) during a function call of
  307. 01h through 0Ch. DOS uses 3 separate internal stacks: one for calls 01h through
  308. 0Ch; another for calls 0Dh and above; and a third for calls 01h through 0Ch when
  309. a Critical Error is in progress. When int 28h is called, any calls above 0Ch can
  310. be executed without destroying the internal stack used by DOS at the time.
  311.  It is used primarily by the PRINT.COM routines, but any number of other
  312. routines can be chained to it by saving the original vector and calling it with
  313. a FAR call (or just JMPing to it) at the end of the new routine.
  314.  Int 28h is being issued it is usually safe to do DOS calls. You won't get int
  315. 28hs if a program is running that doesn't do its keyboard input through DOS. You
  316. should rely on the timer interrupt for these.
  317.  Int 28h is not called at all when any non-trivial foreground task is running.
  318. As soon as a foreground program has a file open, INT28 no longer gets called.
  319. Could make a good driver for for abackground program that really works as long
  320. as there is nothing else going on in the machine.
  321.  
  322. entry   no parameters availible
  323. return  none
  324. note 1) The int 28h handler may invoke any int 21h function except functions
  325.         00h through 0Ch (and 50h/51h under DOS 2.x).
  326.      2) Apparently int 28h is also called during screen writes
  327.      3) Until some program installs its own routine, this interrupt vector
  328.         simply points to an IRET opcode.
  329.      4) Supported in OS/2 1.0's DOS Compatibility Box
  330.  
  331.  
  332. Interrupt 29h   (not documented by Microsoft)
  333.            *    Internal - Quick Screen Output
  334.  
  335.  This method is extremely fast (much faster than DOS 21h subfunctions 2 and 9,
  336. for example), and it is portable, even to "non-compatible" MS-DOS computers.
  337.  
  338. entry   AL      character to output to screen
  339. return  unknown
  340. note 1) Documented by Digital Research's DOS Reference as provided with the
  341.         DEC Rainbow
  342.      2) If ANSI.SYS is installed, character output is filtered through it.
  343.      3) Works on the IBM PC and compatibles, Wang PC, HP-150 and Vectra, DEC
  344.         Rainbow, NEC APC, Texas Instruments PC and others
  345.      4) This interrupt is called from the DOS's output routines if output is
  346.         going to a device rather than a file, and the device driver's attribute
  347.         word has bit 3 (04h) set to "1".
  348.      5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 3.1, PCDOS
  349.         3.2, and PCDOS 3.3.
  350.      6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write TTY)
  351.         followed by an IRET.
  352.  
  353.  
  354.  
  355. Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt
  356.            *    (not documented by Microsoft)
  357.  
  358. entry   AH      00h     check to see if network BIOS installed
  359.                         return: AH      <> 0 if installed
  360.                 01h     execute NETBIOS request
  361.                 02h     set net printer mode
  362.                 03h     get shared-device status (check direct I/O)
  363.                         AL      00h
  364.                         DS:SI   pointer to ASCIIZ disk device name
  365.                         return  CF      0 if allowed
  366.                 04h     execute NETBIOS
  367.                         AL      0 for error retry
  368.                                 1 for no retry
  369.                         ES:BX   pointer to ncb
  370.                         return  AX      0 for no error
  371.                                 AH      1 if error
  372.                                 AL      error code
  373.                 05h     get network resource information
  374.                         AL      00h
  375.                         return  AX      reserved
  376.                                 BX      number of network names
  377.                                 CX      number of commands
  378.                                 DX      number of sessions
  379.                 82h     unknown
  380.                         return  ??
  381. note    called by the int 21h function dispatcher in DOS 3.10
  382.  
  383.  
  384. Interrupt 2Bh   (not documented by Microsoft)
  385.            *    Unknown - Internal Routine for DOS (IRET)
  386.  
  387.  
  388. Interrupt 2Ch   (not documented by Microsoft)
  389.            *    Unknown - Internal Routine for DOS (IRET)
  390.  
  391.  
  392. Interrupt 2Dh   (not documented by Microsoft)
  393.            *    Unknown - Internal Routine for DOS (IRET)
  394.  
  395.  
  396. Interrupt 2Eh   (undocumented by Microsoft)
  397.            *    Internal Routine for DOS  (Alternate EXEC)
  398.  
  399.   This interrupt passes a command line addressed by DS:SI to COMMAND.COM. The
  400. command line must be formatted just like the unformatted parameter area of a
  401. Program Segment Prefix. That is, the first byte must be a count of characters,
  402. and the second and subsequent bytes must be a command line with parameters,
  403. terminated by a carriage return character.
  404.   When executed, int 2Eh will reload the transient part of the command
  405. interpreter if it is not currently in memory. If called from a program that
  406. was called from a batch file, it will abort the batch file. If executed from a
  407. program which has been spawned by the EXEC function, it will abort the whole
  408. chain and probably lock up the computer. Int 2Eh also destroys all registers
  409. including the stack pointer.
  410.   Int 2Eh is called from the transient portion of the program to reset the DOS
  411. PSP pointers using the above Functions #81 & #80, and then reenters the
  412. resident program.
  413.   When called with a valid command line, the command will be carried out by
  414. COMMAND.COM just as though you had typed it in at the DOS prompt. Note that the
  415. count does not include the carriage return. This is an elegant way to perform a
  416. SET from an application program against the master environment block for
  417. example.
  418.  
  419. entry   DS:SI   pointer to an ASCIIZ command line in the form:
  420.                         count byte
  421.                         ASCII string
  422.                         carriage return
  423.                         null byte
  424. note 1) Destroys all registers including stack pointer
  425.      2) Seems to work OK in both DOS 2.x and 3.x
  426.      3) It is reportedly not used by DOS.
  427.      4) As far as known, int 2Eh is not used by DOS 3.1, although it was called
  428.         by COMMAND.COM of PCDOS 3.0, so it appears to be in 3.1 only for the
  429.         sake of compatibility.
  430.  
  431.  
  432.  
  433. Interrupt 2Fh   Multiplex Interrupt
  434.  
  435.  Interrupt 2Fh is the multiplex interrupt. A general interface is defined
  436. between two processes. It is up to the specific application using interrupt
  437. 2Fh to define specific functions and parameters.
  438.  Every multiplex interrupt handler is assigned a specific multiplex number.
  439. The multiplex number is specified in the AH register; the AH value tells which
  440. program your request is directed toward. The specific function that the handler
  441. is to perform is placed in the AL register. Other parameters are places in the
  442. other registers as needed. The handlers are chained into the 2Fh interrupt
  443. vector and the multiplex number is checked to see if any other application is
  444. using the same multiplex number. There is no predefined method for assigning a
  445. multiplex number to a handler. You must just pick one. To avoid a conflict if
  446. two applications choose the same multiplex number, the multiplex numbers used by
  447. an application should be patchable. In order to check for a previous
  448. installation of the current application, you can search memory for a unique
  449. string included in your program. If the value you wanted in AH is taken but
  450. you don't find the string, then another application has grabbed that location.
  451.  Int 2Fh was not documented under DOS 2.x. There is no reason not to use int 2Fh
  452. as the multiplex interrupt in DOS 2.x. The only problem is that DOS does not
  453. initialize the int 2Fh vector, so when you try to chain to it like you are
  454. supposed to, it will crash. But if your program checks the vector for being zero
  455. and doesn't chain in that case, it will work for you in 2.x just the same as
  456. 3.x.
  457.  Int 2Fh doesn't require any support from DOS itself for it to be used in
  458. application programs. It's not handled by DOS, but by the programs themselves.
  459. The only support DOS has to provide is to initialize the vector to an IRET. DOS
  460. 3.2 does itself contain some int 2Fh handlers - it uses values of 08h, 13h, and
  461. 0F8h. There may be more.
  462.  
  463.  
  464. entry   AH      01h     PRINT.COM
  465.                 AL      00h     PRINT  Get Installed State
  466.                         This call must be defined by all int 2Fh handlers. It
  467.                         is used by the caller of the handler to determine if
  468.                         the handler is present. On entry, AL=0. On return, AL
  469.                         contains the installed state as follows:
  470.                 return  AL      0FFh    installed
  471.                                 01h     not installed, not OK to install
  472.                                 00h     not installed, OK to install
  473.  
  474.  
  475.                         01h     PRINT  Submit File
  476.                         DS:DX   pointer to submit packet
  477.                                 format  BYTE    level
  478.                                         DWORD   pointer to ASCIIZ filename
  479.                 return  CF      set if error
  480.                                 AX      error code
  481.                 note 1) A submit packet contains the level (BYTE) and a pointer
  482.                         to the ASCIIZ string (DWORD in offset:segment form).
  483.                         The ASCIIZ string must contain the drive, path, and
  484.                         filename of the file you want to print. The filename
  485.                         cannot contain global filename characters.
  486.                 return  CF      set if error
  487.                                 AX      error code
  488.  
  489.                         02h     PRINT Cancel File
  490.                         On entry, AL=2 and DS:DX points to the ASCIIZ string for
  491.                         the print file you want to cancel. Global filename
  492.                         characters are allowed in the filename.
  493.                 DS:DX   pointer to ASCIIZ file name to cancel (wildcards OK)
  494.                 return  CF      set if error
  495.                                 AX      error code
  496.  
  497.                         03h     PRINT remove all files
  498.                 return  CF      set if error
  499.                                 AX      error code
  500.  
  501.                         04h     PRINT hold queue/get status
  502.                         This call holds the jobs in the print queue so that you
  503.                         can scan the queue. Issuing any other code releases the
  504.                         jobs. On entry, AL=4. On return, DX contains the error
  505.                         count. DS:SI points to the print queue. The print queue
  506.                         consists of a series of filename entries. Each entry is
  507.                         64 bytes long. The first entry in the queue is the file
  508.                         currently being printed. The end of the queue is marked
  509.                         by the entry having a null as the first character.
  510.                return   DX      error count
  511.                         DS:SI   pointer to print queue (null-string terminated
  512.                                 list of 64-byte ASCIIZ filenames)
  513.                         CF      set if error
  514.                                AX       error code
  515.                                         01h     function invalid
  516.                                         02h     file not found
  517.                                         03h     path not found
  518.                                         04h     too many open files
  519.                                         05h     access denied
  520.                                         08h     queue full
  521.                                         09h     spooler busy
  522.                                         0Ch     name too long
  523.                                         0Fh     drive invalid
  524.  
  525.                         05h     PRINT restart queue
  526.                 return  CF      set if error
  527.                                 AX      error code
  528.  
  529.         AH      05h     DOS 3.x critical error handler
  530.                 AL      00h     installation check
  531.                         return  AL      00h not installed, OK to install
  532.                                         01h not installed, can't install
  533.                                         0FFh installed
  534.                         note    This set of functions allows a user program to
  535.                                 partially or completely override the default
  536.                                 critical error handler in COMMAND.COM
  537.                 AL      01h     handle error - nonzero error code in AL
  538.                         return  CF      clear
  539.                                         ES:DI   pointer to ASCIIZ error message
  540.                                 CF      set     use default error handler
  541.                                 AL      (?)
  542.  
  543.         AH      06h     ASSIGN
  544.                         00h     installation check
  545.                         return  AH <> 0 if installed
  546.  
  547.                         01h     get memory segment
  548.                         return  ES      segment of ASSIGN work area
  549.  
  550.         AH      10h     SHARE
  551.                         00h     installation check
  552.                         return  AL      00h    not installed, OK to install
  553.                                         01h    not installed, not OK to install
  554.                                         0FFh   installed
  555.  
  556.         AH      11h     multiplex - network redirection
  557.                         00h     installation check
  558.                         return  AL      00h    not installed, OK to install
  559.                                         01h    not installed, not OK to install
  560.                                         0FFh   installed
  561.                         01h     unknown
  562.                         02h     unknown
  563.                         03h     unknown
  564.                         04h     unknown
  565.                         05h     unknown
  566.                         06h     close remote file
  567.                         07h     unknown
  568.                         08h     unknown
  569.                         09h     unknown
  570.                         0Ah     unknown
  571.                                 STACK: WORD (?)
  572.                                 return  CF      set on error
  573.                         0Bh     unknown
  574.                                 STACK: WORD (?)
  575.                                 return  CF      set on error(?)
  576.                         0Ch     unknown
  577.                         0Dh     unknown
  578.                         0Eh     unknown
  579.                                 STACK: WORD (?)
  580.                                 return  (?)
  581.                         0Fh     unknown
  582.                         11h     unknown
  583.                         13h     unknown
  584.                         16h     unknown
  585.                         17h     unknown
  586.                                 STACK: WORD (?)
  587.                                 return  (?)
  588.                         18h     unknown
  589.                                 STACK: WORD (?)
  590.                                 return  (?)
  591.                         19h     unknown
  592.                         1Bh     unknown
  593.                         1Ch     unknown
  594.                         1Dh     unknown
  595.                         1Eh     do redirection
  596.                                 STACK: WORD function to execute
  597.                                 return  CF      set on error
  598.                         1Fh     printer setup
  599.                                 STACK: WORD function(?)
  600.                                 return  CF      set on error(?)
  601.                         20h     unknown
  602.                         21h     unknown
  603.                         22h     unknown
  604.                         23h     unknown
  605.                         24h     unknown
  606.                         25h     unknown
  607.                                 STACK: WORD (?)
  608.                         26h     unknown
  609.  
  610.         AH      12h     multiplex, DOS 3.x internal services
  611.                         00h     installation check
  612.                         return  AL      0FFh    for compatibility with other
  613.                                                 int 2Fh functions
  614.                         01h     close file (?)
  615.                                 stack   word value - unknown
  616.                                 return  BX      unknown
  617.                                         CX      unknown
  618.                                         ES:DI   pointer to unknown value
  619.                                 note    Can be called only from within DOS
  620.                         02h     get interrupt address
  621.                                 stack: word vector number
  622.                                 return  ES:BX pointer to interrupt vector
  623.                                         Stack unchanged
  624.                         03h     get DOS data segment
  625.                                 return  DS      segment of IBMDOS
  626.                         04h     normalize path separator
  627.                                 stack: word character to normalize
  628.                                 return  AL      normalized character (forward
  629.                                                 slash turned to backslash)
  630.                                         Stack unchanged
  631.                         05h     output character
  632.                                 stack: word character to output
  633.                                 return  Stack unchanged
  634.                                 note    Can be called only from within DOS
  635.                         06h     invoke critical error
  636.                                 return  AL      0-3 for Abort, Retry, Ignore,
  637.                                                 Fail
  638.                                 note    Can be called only from within DOS
  639.                         07h     move disk buffer (?)
  640.                                 DS:DI   pointer to disk buffer
  641.                                 return  buffer moved to end of buffer list
  642.                                 note    Can be called only from within DOS
  643.                         08h     decrement word
  644.                                 ES:DI   pointer to word to decrement
  645.                                 return  AX      new value of word
  646.                                 note    Word pointed to by ES:DI decremented,
  647.                                         skipping zero
  648.                         09h     unknown
  649.                                 DS:DI   pointer to disk buffer(?)
  650.                                 return  (?)
  651.                                 note    Can be called only from within DOS
  652.                         0Ah     unknown
  653.                                 note    Can be called only from within DOS
  654.                         0Bh     unknown
  655.                                 ES:DI   pointer to system file table entry(?)
  656.                                 return  AX      (?)
  657.                                 note    Can be called only from within DOS
  658.                         0Ch     unknown
  659.                                 note    Can be called only from within DOS
  660.                         0Dh     get date and time
  661.                                 return  AX      current date in packed format
  662.                                         DX      current time in packed format
  663.                                 note    Can be called only from within DOS
  664.                         0Eh     do something to all disk buffers (?)
  665.                                 return  DS:DI   pointer to first disk buffer
  666.                                 note    can be called only from within DOS
  667.                         0Fh     unknown
  668.                                 DS:DI   pointer to (?)
  669.                                 return  DS:DI pointer to (?)
  670.                                 note 1) Can be called only from within DOS
  671.                                      2) Calls on function 1207h
  672.                         10h     find dirty/clean(?) buffer
  673.                                 DS:DI   pointer to first disk buffer
  674.                                 return  DS:DI   pointer to first disk buffer
  675.                                                 which has (?) flag clear
  676.                                         ZF      clear if found
  677.                                                 set if not found
  678.                         11h     normalize ASCIIZ filename
  679.                                 DS:SI   pointer to ASCIZ filename to normalize
  680.                                 ES:DI   ptr to buffer for normalized filename
  681.                                 return  destination buffer filled with upper-
  682.                                         case filename, with slashes turned to
  683.                                         backslashes
  684.                         12h     get length of ASCIIZ string
  685.                                 ES:DI   pointer to ASCIZ string
  686.                                 return  CX      length of string
  687.                         13h     uppercase character
  688.                                 stack: word character to convert to uppercase
  689.                                 return  AL      uppercase character
  690.                                         Stack unchanged
  691.                         14h     compare far pointers
  692.                                 DS:SI   first pointer
  693.                                 ES:DI   second pointer
  694.                                 return  ZF      set if pointers are equal
  695.                                         ZF      clear if not equal
  696.                         15h     unknown
  697.                                 DS:DI   pointer to disk buffer
  698.                                 stack: word (?)
  699.                                 return  Stack unchanged
  700.                                 note    Can be called only from within DOS
  701.                         16h     get address of system FCB
  702.                                 BX      system file table entry number
  703.                                 return  ES:DI pointer to system file table entry
  704.                         17h     set default drive (?)
  705.                                 stack: word drive (0 = A:, 1 = B:, etc)
  706.                                 return  DS:SI   pointer to drive data block for
  707.                                                 specified drive
  708.                                         Stack unchanged
  709.                                 note    Can be called only from within DOS
  710.                         18h     get something (?)
  711.                                 return  DS:SI pointer to (?)
  712.                         19h     unknown
  713.                                 stack: word drive (0 = default, 1 = A:, etc)
  714.                                 return  (?)
  715.                                         Stack unchanged
  716.                                 note 1) Can be called only from within DOS
  717.                                      2) Calls function 1217h
  718.                         1Ah     get file's drive
  719.                                 DS:SI   pointer to filename
  720.                                 return  AL      drive
  721.                                         (0=default, 1=A:, etc, 0FFh=invalid)
  722.                         1Bh     set something (?)
  723.                                 CL      unknown
  724.                                 return  AL      (?)
  725.                                 note    Can be called only from within DOS
  726.                         1Ch     checksum memory
  727.                                 DS:SI   pointer to start of memory to checksum
  728.                                 CX      number of bytes
  729.                                 DX      initial checksum
  730.                                 return  DX      checksum
  731.                                 note    Can be called only from within DOS
  732.                         1Dh     unknown
  733.                                 DS:SI   pointer to (?)
  734.                                 CX      (?)
  735.                                 DX      (?)
  736.                                 return  AX      (?)
  737.                                         CX      (?)
  738.                                         DX    = (?)
  739.                         1Eh     compare filenames
  740.                                 DS:SI   pointer to first ASCIIZ filename
  741.                                 ES:DI   pointer to second ASCIIZ filename
  742.                                 return  ZF      set     if filenames equivalent
  743.                                                 clear   if not
  744.                         1Fh     build drive info block
  745.                                 stack: word drive letter
  746.                                 return  ES:DI pointer to drive info block
  747.                                               (will be overwritten by next call)
  748.                                         Stack unchanged
  749.                                 note    Can be called only from within DOS
  750.                         20h     get system file table number
  751.                                 BX      file handle
  752.                                 return  CF set on error
  753.                                         AL      6 (invalid file handle)
  754.                                         CF      clear if successful
  755.                                         byte ES:[DI] = system file table entry
  756.                                             number for file handle
  757.                         21h     unknown
  758.                                 DS:SI   pointer to (?)
  759.                                 return  (?)
  760.                                 note    Can be called only from within DOS
  761.                         22h     unknown
  762.                                 SS:SI   pointer to (?)
  763.                                 return  nothing(?)
  764.                                 note    Can be called only from within DOS
  765.                         23h     check if character device (?)
  766.                                 return  DS:SI   pointer to device driver with
  767.                                                 same name as (?)
  768.                                 note    Can be called only from within DOS
  769.                         24h     delay
  770.                                 return  after delay of (?) ms
  771.                                 note    Can be called only from within DOS
  772.                         25h     get length of ASCIIZ string
  773.                                 DS:SI   pointer to ASCIIZ string
  774.                                 return  CX      length of string
  775.  
  776.         AH      43h     Microsoft Extended Memory Specification (XMS)
  777.  
  778.         AH      64h     SCRNSAV2.COM
  779.                 AL      00h     installation check
  780.                         return  AL      00h     not installed
  781.                                         0FFh    installed
  782.                         note    SCRNSAV2.COM is a screen saver for PS/2's with
  783.                                 VGA by Alan Ballard
  784.  
  785.         AH      7Ah     Novell NetWare
  786.                 AL      00h     installation check
  787.                         note    Returns address of entry point for IPX and SPX
  788.  
  789.         AH      0AAh    VIDCLOCK.COM
  790.                 AL      00h     installation check
  791.                         return  AL      00h     not installed
  792.                                         0FFh    installed
  793.                         note    VIDCLOCK.COM is a memory-resident clock by
  794.                                 Thomas G. Hanlin III
  795.  
  796.         AH      0B7h    APPEND
  797.                 AL      00h     APPEND installation check
  798.                                 return  AH <> 0 if installed
  799.                         01h     APPEND - unknown
  800.                         02h     APPEND - version check
  801.  
  802.         AH      0B8h    Microsoft Networks
  803.                 AL      00h     network program installation check
  804.                         return  AH <> 0 if installed
  805.                                 BX      installed component flags (test in this
  806.                                         order!)
  807.                                 bit 6   server
  808.                                 bit 2   messenger
  809.                                 bit 7   receiver
  810.                                 bit 3   redirector
  811.                         01h     unknown
  812.                         02h     unknown
  813.                         03h     get current POST address
  814.                         return  ES:BX   POST address
  815.                         04h     set new POST address
  816.                         ES:BX   new POST address
  817.                         09h     version check
  818.  
  819.         AH      0BBh    Network functions
  820.                 AL      00h     net command installation check
  821.                         03h     get server POST address
  822.                         04h     get server POST address
  823.  
  824.         AH      0F7h    AUTOPARK.COM  (PD TSR hard disk parking utility)
  825.                 AL      00h     installation check
  826.                         return  AL      00h     not installed
  827.                                         0FFh    installed
  828.                         note    AUTOPARK is a TSR HD parker by Alan D. Jones
  829.                         01h     set parking delay
  830.                         BX:CX   32 bit count of 55ms timer ticks
  831.  
  832. return  AX      Error
  833.                 Codes       Description
  834.                 01h     invalid function number
  835.                 02h     file not found
  836.                 03h     path not found
  837.                 04h     too many open files
  838.                 05h     access denied
  839.                 06h     invalid handle
  840.                 08h     queue full
  841.                 09h     busy
  842.                 0Ch     name too long
  843.                 0Fh     invalid drive was specified
  844.         CF      clear (0) if OK
  845.                 set (1) if error - error returned in AX
  846. note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for DOS.
  847.         Applications should use multiplex numbers 80h through 0FFh.
  848.      2) When in the chain for int 2Fh, if your code calls DOS or if you execute
  849.         with interrupts enabled, your code must be reentrant/recursive.
  850.  
  851.  
  852.  
  853. Interrupt 30h   (not a vector!) far jump instruction for CP/M-style calls
  854.  
  855.  
  856. Interrupt 31h   Unknown
  857. note    The CALL 5 entry point does a FAR jump to here
  858.  
  859.  
  860. Interrupt 32h   Unknown
  861.  
  862.  
  863.  
  864.  
  865. Interrupt 33h   Used by Microsoft Mouse Driver
  866.                 Function Calls
  867.  
  868.         00h     Reset Driver and Read Status
  869.         entry   AH      00h
  870.         return  AH      status
  871.                         0  hardware/driver not installed
  872.                         -1 hardware/driver installed
  873.                 BX      number of buttons
  874.                         -1      two buttons
  875.                         0       other than two
  876.                         3       Mouse Systems mouse
  877.  
  878.         01h     Show Mouse Cursor
  879.         entry   AH      01h
  880.         return  unknown
  881.  
  882.         02h     Hide Mouse Cursor
  883.         entry   AH      02h
  884.         return  unknown
  885.         note    multiple calls to hide the cursor will require multiple calls
  886.                 to function 01h to unhide it.
  887.  
  888.         03h     Return Position and Button Status
  889.         entry   AH      03h
  890.         return  BX      button status
  891.                         bit 0   left button pressed if 1
  892.                         bit 1   right button pressed if 1
  893.                         bit 2   middle button pressed if 1 (Mouse Systems mouse)
  894.                 CX      column
  895.                 DX      row
  896.  
  897.         04h     Position Mouse Cursor
  898.         entry   AH      04h
  899.                 CX      column
  900.                 DX      row
  901.                 return  unknown
  902.  
  903.         05h     Return Button Press Data
  904.         entry   AH      05h
  905.                 BX      button
  906.                         0 left
  907.                         1 right
  908.                         2 middle (Mouse Systems mouse)
  909.         return  AH      button states
  910.                         bit 0   left button pressed if 1
  911.                         bit 1   right button pressed if 1
  912.                         bit 2   middle button pressed if 1 (Mouse Systems mouse)
  913.                 BX      no. of times specified button pressed since last call
  914.                 CX      column at time specified button was last pressed
  915.                 DX      row at time specified button was last pressed
  916.  
  917.         06h     Return Button Release Data
  918.         entry   AH      06h
  919.                 BX      button
  920.                         0       left
  921.                         1       right
  922.                         2       middle (Mouse Systems mouse)
  923.         return  AH      button states
  924.                         bit 0   left button pressed if 1
  925.                         bit 1   right button pressed if 1
  926.                         bit 2   middle button pressed if 1 (Mouse Systems mouse)
  927.                 BX      no. of times specified button released since last call
  928.                 CX      column at time specified button was last released
  929.                 DX      row at time specified button was last released
  930.  
  931.         07h     Define Horizontal Curos Range
  932.         entry   AH      0007h
  933.                 CX      minimum column
  934.                 DX      maximum column
  935.         return  unknown
  936.  
  937.         08h     Define Vertical Cursor Range
  938.         entry   AH      08h
  939.                 CX      minimum row
  940.                 DX      maximum row
  941.                 return  unknown
  942.  
  943.         09h     Define Graphics Cursor
  944.         entry   AH      09h
  945.                 BX      column of cursor hot spot in bitmap (-16 to 16)
  946.                 CX      row of cursor hot spot  (-16 to 16)
  947.                 ES:DX   pointer to bitmap
  948.                         16 words screen mask
  949.                         16 words cursor mask
  950.                 return  unknown
  951.                 note    Each word defines the sixteen pixels of a row, low bit
  952.                         rightmost
  953.  
  954.         0Ah     Define Text Cursor
  955.         entry   AH      0Ah
  956.                 BX      hardware/software text cursor
  957.                         00h     software
  958.                                 CX      screen mask
  959.                                 DX      cursor mask
  960.                         01h     hardware
  961.                                 CX      start scan line
  962.                                 DX      end scan line
  963.         return  unknown
  964.         note    When the software cursor is selected, the char/attribute data
  965.                 at the current screen position is ANDed with the screen mask
  966.                 and the with the cursor mask
  967.  
  968.         0BH     Read Motion Counters
  969.         entry   AH      0Bh
  970.         return  CX      number of mickeys mouse moved horiz. since last call
  971.                 DX      number of mickeys mouse moved vertically
  972.         note 1) A mickey is the smallest increment the mouse can sense.
  973.                 Positive values indicate up/right
  974.  
  975.         0Ch     Define Interrupt Subroutine Parameters
  976.         entry   AH      0Ch
  977.                 CX      call mask bit
  978.                         bit 0   call if mouse moves
  979.                         bit 1   call if left button pressed
  980.                         bit 2   call if left button released
  981.                         bit 3   call if right button pressed
  982.                         bit 4   call if right button released
  983.                         bit 5   call if middle button pressed (Mouse Systems)
  984.                         bit 6   call if middle button released (Mouse Systems)
  985.                 ES:DX  address of FAR routine
  986.         return  unknown
  987.         note    when the subroutine is called, it is passed these values:
  988.                 AH      condition mask (same bit assignments as call mask)
  989.                 BX      button state
  990.                 CX      cursor column
  991.                 DX      cursor row
  992.                 DI      horizontal mickey count
  993.                 SI      vertical mickey count
  994.  
  995.         0Dh     Light Pen Emulation On
  996.         entry   AH      0Dh
  997.         return  unknown
  998.  
  999.         0Eh     Light Pen Emulation Off
  1000.         entry   AH      0Eh
  1001.         return  unknown
  1002.  
  1003.         0Fh     Define Mickey/Pixel Ratio
  1004.         entry   AH      0Fh
  1005.                 CX      number of mickeys per 8 pixels horizontally
  1006.                 DX      number of mickeys per 8 pixels vertically
  1007.         return  unknown
  1008.  
  1009.         10h     Define Screen Region for Updating
  1010.         entry   AH      10h
  1011.                 CX,DX   X,Y coordinates of upper left corner
  1012.                 SI,DI   X,Y coordinates of lower right corner
  1013.         return  unknown
  1014.         note    Mouse cursor is hidden during updating, and needs to be
  1015.                 explicitly turned on again
  1016.  
  1017.         11h     not documented by Microsoft
  1018.  
  1019.         12h     Set Large Graphics Cursor Block
  1020.                 AH      12h
  1021.                 BH      cursor width in words
  1022.                 CH      rows in cursor
  1023.                 BL      horizontal hot spot (-16 to 16)
  1024.                 CL      vertical hot spot (-16 to 16)
  1025.                 ES:DX   pointer to bit map of screen and cursor maps
  1026.         return  AH      -1 if successful
  1027.         note    PC Mouse. Not dodcumented by Microsoft
  1028.  
  1029.         13h     Define Double-Speed Threshold
  1030.         entry   AH      13h
  1031.                 DX      threshold speed in mickeys/second,
  1032.                         0 = default of 64/second
  1033.         return  unknown
  1034.         note    If speed exceeds threshold, the cursor's on-screen motion
  1035.                 is doubled
  1036.  
  1037.         14h     Exchange Interrupt Subroutines
  1038.         entry   AH      14h
  1039.         return  unknown
  1040.  
  1041.         15h     Return Drive Storage Requirements
  1042.         entry   AH      15h
  1043.         return  BX      size of buffer needed to store driver state
  1044.  
  1045.         16h     Save Driver State
  1046.         entry   AH      16h
  1047.                 ES:DX   pointer to buffer
  1048.         return  unknown
  1049.  
  1050.         17h     Restore Driver State
  1051.         entry   AH      17h
  1052.                 ES:DX   pointer to buffer containing saved state
  1053.         return  unknown
  1054.  
  1055.         18h     not documented by Microsoft
  1056.  
  1057.         19h     not documented by Microsoft
  1058.  
  1059.         1Ah     not documented by Microsoft
  1060.  
  1061.         1Bh     not documented by Microsoft
  1062.  
  1063.         1Ch     not documented by Microsoft
  1064.  
  1065.         1Dh     Define Display Page Number
  1066.         entry   AH      1Dh
  1067.  
  1068.         1Eh     Return Display Page Number
  1069.         entry   AH      1Eh
  1070.         return  unknown
  1071.  
  1072.         42h     PCMouse - Get MSmouse Storage Requirements
  1073.                 AH      42h
  1074.                 return  AX      0FFFFh successful
  1075.                 BX      buffer size in bytes for functions 50h and 52h
  1076.                         00h     MSmouse not installed
  1077.                         42h     functions 42h, 50h, and 52h not supported
  1078.  
  1079.         52h     PCMouse - Save MSmouse State
  1080.         entry   AH      50h
  1081.                 BX      buffer size
  1082.                 ES:DX   pointer to buffer
  1083.                 return  AX      0FFFFh if successful
  1084.  
  1085.         52h     PCMouse - restore MSmouse state
  1086.         entry   AH      52h
  1087.                 BX      buffer size
  1088.                 ES:DX   pointer to buffer
  1089.                 return  AX      0FFFFh if successful
  1090.  
  1091.  
  1092. Int 33: In addition, the following functions are appended to BIOS int 10h and
  1093.         implemented as the EGA Register Interface Library:
  1094.  
  1095.         0F0h    read one register
  1096.         0F1h    write one register
  1097.         0F2h    read consecutive register range
  1098.         0F3h    write consecutive register range
  1099.         0F4h    read non-consecutive register set
  1100.         0F5h    write non-consecutive register set
  1101.         0F6h    revert to default register values
  1102.         0F7h    define default register values
  1103.         0FAh    get driver status
  1104.  
  1105.  
  1106.  
  1107. Interrupt 34h   Turbo C/Microsoft languages - Floating Point emulation
  1108.                 This interrupt emulates opcode 0D8h
  1109.  
  1110. Interrupt 35h   Turbo C/Microsoft languages - Floating Point emulation
  1111.                 This interrupt emulates opcode 0D9h
  1112.  
  1113. Interrupt 36h   Turbo C/Microsoft languages - Floating Point emulation
  1114.                 This interrupt emulates opcode 0DAh
  1115.  
  1116. Interrupt 37h   Turbo C/Microsoft languages - Floating Point emulation
  1117.                 This interrupt emulates opcode 0DBh
  1118.  
  1119. Interrupt 38h   Turbo C/Microsoft languages - Floating Point emulation
  1120.                 This interrupt emulates opcode 0DCh
  1121.  
  1122. Interrupt 39h   Turbo C/Microsoft languages - Floating Point emulation
  1123.                 This interrupt emulates opcode 0DDh
  1124.  
  1125. Interrupt 3Ah   Turbo C/Microsoft languages - Floating Point emulation
  1126.                 This interrupt emulates opcode 0DEh
  1127.  
  1128. Interrupt 3Bh   Turbo C/Microsoft languages - Floating Point emulation
  1129.                 This interrupt emulates opcode 0DFh
  1130.  
  1131. Interrupt 3Ch   Turbo C/Microsoft languages - Floating Point emulation
  1132.                 This int emulates instructions with an ES segment override
  1133.  
  1134. Interrupt 3Dh   Turbo C/Microsoft languages - Floating Point emulation
  1135.                 This interrupt emulates a standalone FWAIT instruction
  1136.  
  1137. Interrupt 3Eh   Turbo C/Microsoft languages - Floating Point emulation
  1138.  
  1139. Interrupt 3Fh   Overlay manager interrupt (Microsoft LINK.EXE)
  1140.  
  1141. Interrupt 40h   Hard Disk BIOS
  1142.                 Pointer to disk BIOS entry when a hard disk controller is
  1143.                 installed. The BIOS routines use int 30h to revector the
  1144.                 diskette handler (original int 13h) here so int 40 may be used
  1145.                 for hard disk control
  1146.  
  1147. Interrupt 41h   Hard Disk Parameters  (XT,AT,XT2,XT286,PS except ESDI disks)
  1148.                 Pointer to first Hard Disk Parameter Block, normally located
  1149.                 in the controller card's ROM. This table may be copied to RAM
  1150.                 and changed, and this pointer revectored to the new table.
  1151. note 1) format of parameter table is:
  1152.         dw      cylinders
  1153.         db      heads
  1154.         dw      starting reduced write current cylinder (XT only, 0 for others)
  1155.         db      maximum ECC burst length
  1156.         db      control byte
  1157.                   bits 0-2 drive option (XT only, 0 for others)
  1158.                   bit 3    set if more than 8 heads
  1159.                   bit 4    always 0
  1160.                   bit 5    set if manufacturer's defect map on max cylinder+1
  1161.                   bit 6    disable ECC retries
  1162.                   bit 7    disable access retries
  1163.         db      standard timeout (XT only, 0 for others)
  1164.         db      formatting timeout (XT only, 0 for others)
  1165.         db      timeout for checking drive (XT only, 0 for others)
  1166.         dw      landing zone    (AT, PS/2)
  1167.         db      sectors/track   (AT, PS/2)
  1168.         db      0
  1169.      2) normally vectored to ROM table when system is initialized.
  1170.  
  1171.  
  1172. Interrupt 42h   Pointer to screen BIOS entry  (EGA, VGA, PS/2)
  1173.                 Relocated (by EGA, etc.) video handler (original int 10h).
  1174.                 Revectors int 10 calls to EGA BIOS.
  1175.  
  1176.  
  1177. Interrupt 43h   Pointer to EGA initialization parameter table. The POST
  1178.                 initializes this vector pointing to the default table located
  1179.                 in the EGA ROM BIOS. (PC-2 and up). Not initialized if EGA not
  1180.                 present.
  1181.  
  1182.  
  1183. Interrupt 44h   Pointer to EGA graphics character table (also PCjr). This
  1184. (0:0110h)       table contains the dot patterns for the first 128 characters
  1185.                 in video modes 4,5, and 6, and all 256 characters in all
  1186.                 additional graphics modes. Not initialized if EGA not present.
  1187.              2) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
  1188.              3) Novell NetWare - High-Level Language API
  1189.  
  1190.  
  1191. Interrupt 45h   Reserved by IBM  (not initialized)
  1192.  
  1193. Interrupt 46h   Pointer to second hard disk, parameter block (AT, XT/286, PS/2)
  1194.                 (see int 41h) (except ESDI hard disks) (not initialized unless
  1195.                 specific user software calls for it)
  1196.  
  1197. Interrupt 47h   Reserved by IBM  (not initialized)
  1198.  
  1199. Interrupt 48h   Cordless Keyboard Translation (PCjr, XT [never delivered])
  1200. (0:0120h)       This vector points to code to translate the cordless keyboard
  1201.                 scancodes into normal 83-key values. The translated scancodes
  1202.                 are then passed to int 9. (not initialized on PC or AT)
  1203.  
  1204. Interrupt 49h   Non-keyboard Scan Code Translation Table Address (PCjr)
  1205. (0:0124h)       This interrupt has the address of a table used to translate
  1206.                 non-keyboard scancodes (greater than 85 excepting 255). This
  1207.                 interrupt can be revectored by a user application. IBM
  1208.                 recommends that the default table be stored at the beginning
  1209.                 of an application that required revectoring this interrupt,
  1210.                 and that the default table be restored when the application
  1211.                 terminates. (not initialized on PC or AT)
  1212.  
  1213. Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2)
  1214.                 (not initialized on PC or AT)
  1215.                 Invoked by BIOS when real-time clock alarm occurs
  1216.  
  1217. Interrupt 4Bh   Reserved by IBM  (not initialized)
  1218.  
  1219. Interrupt 4Ch   Reserved by IBM  (not initialized)
  1220.  
  1221. Interrupt 4Dh   Reserved by IBM  (not initialized)
  1222.  
  1223. Interrupt 4Eh   Reserved by IBM  (not initialized)
  1224.  
  1225. Interrupt 4Fh   Reserved by IBM  (not initialized)
  1226.  
  1227. Interrupt 50-57 IRQ0-IRQ7 relocated by DesQview
  1228.                 (normally not initialized)
  1229.  
  1230. Interrupt 58h   Reserved by IBM  (not initialized)
  1231.  
  1232. Interrupt 59h   Reserved by IBM  (not initialized)
  1233.                 GSS Computer Graphics Interface (GSS*CGI)
  1234.                 DS:DX   Pointer to block of 5 array pointers
  1235.                 return  CF      0
  1236.                         AX      return code
  1237.                         CF      1
  1238.                         AX      error code
  1239.                 note 1) Int 59 is the means by which GSS*CGI language bindings
  1240.                         communicate with GSS*CGI device drivers and the GSS*CGI
  1241.                         device driver controller.
  1242.                      2) Also used by the IBM Graphic Development Toolkit
  1243.  
  1244. Interrupt 5Ah   Reserved by IBM  (not initialized)
  1245.  
  1246. Interrupt 5Bh   Reserved by IBM  (not initialized)
  1247.  
  1248. Interrupt 5Ah   Cluster Adapter BIOS entry address
  1249.                 (normally not initialized)
  1250.  
  1251. Interrupt 5Bh   Reserved by IBM  (not initialized) (cluster adapter?)
  1252.  
  1253. Interrupt 5Ch   NETBIOS interface entry port
  1254.                 ES:BX   pointer to network control block
  1255. note 1) When the NETBIOS is installed, interrupts 13 and 17 are interrupted by
  1256.         the NETBIOS; interrupt 18 is moved to int 86 and one of int 2 or 3 is
  1257.         used by NETBIOS. Also, NETBIOS extends the int 15 function 90 and 91h
  1258.         functions (scheduler functions)
  1259.      2) Normally not initialized.
  1260.      3) TOPS network card uses DMA 1, 3 or none.
  1261.  
  1262. Interrupt 5Dh   Reserved by IBM  (not initialized)
  1263.  
  1264. Interrupt 5Eh   Reserved by IBM  (not initialized)
  1265.  
  1266. Interrupt 5Fh   Reserved by IBM  (not initialized)
  1267.  
  1268. Interrupt 60h-67h  User Program Interrupts (availible for general use)
  1269.  
  1270. Interrupt 67h   Used by Lotus-Intel-Microsoft Expanded Memory Specification
  1271.         user    and Ashton-Tate/Quadram/AST Enhanced Expanded Memory
  1272.                 specification (See Chapter 10)
  1273.  
  1274. Interrupt 68h   Not Used  (not initialized)
  1275.  
  1276. Interrupt 69h   Not Used  (not initialized)
  1277.  
  1278. Interrupt 6Ah   Not Used  (not initialized)
  1279.  
  1280. Interrupt 6Bh   Not Used  (not initialized)
  1281.  
  1282. Interrupt 6Ch   System Resume Vector (Convertible) (not initialized on PC)
  1283.  
  1284. Interrupt 6Dh   Not Used  (not initialized)
  1285.  
  1286. Interrupt 6Fh   Not Used  (not initialized)
  1287.  
  1288. Interrupt 70h   IRQ 8, Real Time Clock Interrupt  (AT, XT/286, PS/2)
  1289.  
  1290. Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2)
  1291.                 LAN Adapter 1 (rerouted to int 0Ah by BIOS)
  1292.  
  1293. Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved
  1294.  
  1295. Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved
  1296.  
  1297. Interrupt 74h   IRQ 12  Mouse Interrupt (AT, XT/286, PS/2)
  1298.  
  1299. Interrupt 75h   IRQ 13, Coprocessor Error, BIOS Redirect to int 2 (NMI) (AT)
  1300.  
  1301. Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2)
  1302.  
  1303. Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved
  1304.  
  1305. Interrupt 78h   Not Used
  1306.  
  1307. Interrupt 79h   Not Used
  1308.  
  1309. Interrupt 7Ah   Novell NetWare - LOW-LEVEL API
  1310.  
  1311. Interrupt 7Bh-7Fh  Not Used
  1312.  
  1313. Interrupt 80h-85h  Reserved by BASIC
  1314.  
  1315. note    interrupts 80h through ECh are apparently unused and not initialized.
  1316.  
  1317. Interrupt 86h   Relocated by NETBIOS int 18
  1318.  
  1319. Interrupt 86h-0F0h  Used by BASIC when BASIC interpreter is running
  1320.  
  1321. Intrerrupt 0E0h CP/M-86 function calls
  1322.  
  1323. Interrupt 0E4h  Logitech Modula-2 v2.0   MONITOR
  1324. entry   AX      05h     monitor entry
  1325.                 06h     monitor exit
  1326.         BX      priority
  1327.  
  1328. Interrupts 0F1h-0FFh  (absolute addresses 3C4-3FF)
  1329.                       Location of Interprocess Communications Area
  1330.  
  1331. Interrupt 0F8h  Set Shell Interrupt (OEM)
  1332.                 Set OEM handler for int 21h calls from 0F9h through 0FFh
  1333. entry   AH      0F8h
  1334.         DS:DX   pointer to handler for Functions 0F9h thru 0FFh
  1335. note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set up to
  1336.         allow ONE handler for all 7 of these calls. Any call to these handlers
  1337.         will result in the carry bit being set and AX will contain 1 if they are
  1338.         not initialized. The handling routine is passed all registers just as
  1339.         the user set them. The OEM handler routine should be exited through an
  1340.         IRET.
  1341.      2) 10 ms interval timer (Tandy?)
  1342.  
  1343. Interrupt 0F9h  First of 8 SHELL service codes, reserved for OEM shell (WINDOW);
  1344.                 use like HP Vectra user interface?
  1345.  
  1346. Interrupt 0FAh  USART ready (RS-232C)
  1347.  
  1348. Interrupt 0FBh  USART RS ready (keyboard)
  1349.  
  1350. Interrupt 0FCh  Unknown
  1351.  
  1352. Interrupt 0FDh  reserved for user interrupt
  1353.  
  1354. Interrupt 0FEh  AT/XT286/PS50+ - destroyed by return from protected mode
  1355.  
  1356. Interrupt 0FFh  AT/XT286/PS50+ - destroyed by return from protected mode
  1357.  
  1358.